package com.gitee.swsk33.algorithms.string;

/**
 * 字符串常用方法测试
 */
public class StringTest {

	public static void main(String[] args) {
		// 声明一个字符串
		String str = "abcdeabcabcd";
		// 打印字符串长度
		System.out.println("字符串长度：" + str.length());
		// 判断字符串是否相等
		System.out.println("是否与字符串abcdeabcabcd相等：" + str.equals("abcdeabcabcd"));
		System.out.println("是否与字符串abcd相等：" + str.equals("abcd"));
		// 查找某子串在主串第一次出现的位置
		System.out.println("子串cd第一次出现的位置：" + str.indexOf("cd"));
		// 查找某子串在主串最后一次出现的位置
		// indexOf和lastIndexOf若没有匹配到子串会返回-1
		System.out.println("子串cd最后一次出现的位置：" + str.lastIndexOf("cd"));
		// 截取子串：从指定位置开始（包含）一直截取到最后
		System.out.println("从位置2开始一直截取到最后：" + str.substring(2));
		// 截取子串：从指定位置开始（包含）截取到指定位置结束（不包含结束位置）
		System.out.println("截取位置2开始至位置5结束：" + str.substring(2, 5));
		// 很多时候substring方法会结合indexOf、lastIndexOf方法一起使用
		System.out.println("以字符串中第一个d的位置开始，截取到字符串中最后一个a的位置结束（要包含最后一个a）：" + str.substring(str.indexOf("d"), str.lastIndexOf("a") + 1));
		// 判断子串是否包含于主串
		System.out.println("子串abcde是否包含于主串：" + str.contains("abcde"));
		// 判断字符串是否以某个子串开头
		System.out.println("是否以子串abc开头：" + str.startsWith("abc"));
		System.out.println("是否以子串def开头：" + str.startsWith("def"));
		// 判断字符串是否以某个子串结尾
		System.out.println("是否以子串bcd结尾：" + str.endsWith("bcd"));
		System.out.println("是否以子串abc结尾：" + str.endsWith("abc"));
		// 全部转大写
		System.out.println("全部转大写：" + str.toUpperCase());
		// 全部转小写
		System.out.println("全部转小写：" + str.toLowerCase());
		// 比较字符串是否相等但是忽略大小写
		System.out.println("是否和字符串abcDeaBCabCD相等（忽略大小写）：" + str.equalsIgnoreCase("abcDeaBCabCD"));
		// 把字符串拆成字符数组
		char[] chars = str.toCharArray(); // 结果：{'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'a', 'b', 'c', 'd'}
		// 把字符串按照一定的分隔符分割为字符串数组
		// 例如把下面字符串以@为分隔符拆成数组
		String str1 = "a@b@c@d@e";
		String[] result = str1.split("@"); // 结果：{"a", "b", "c", "d", "e"}
		for (String s : result) {
			System.out.print(s + " ");
		}
		System.out.println();

		String main = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab";
		String sub = "aaab";
		// 测试一下写的KMP算法
		System.out.println(StringMatch.KMPMatchIndexOf(main, sub));
		// 用indexOf比较一下我们写的对不对
		System.out.println(main.indexOf(sub));
	}

}